home *** CD-ROM | disk | FTP | other *** search
Text File | 2004-02-23 | 3.5 KB | 182 lines | [TEXT/mdos] |
- #!/usr/bin/perl
-
- my $SYSTEM_VERS = "/System/Library/CoreServices/SystemVersion.plist";
- my $EXIT_VALUE = 0;
- my $Package_Path = $ENV{PACKAGE_PATH};
- if(CheckVersion("$SYSTEM_VERS", "10.3", "ProductVersion", "<")) {
- @localPkgVers = ExtractPkgVersion("$Package_Path");
- @receiptVers = ExtractPkgVersion("/Library/Receipts/" . GetPackageName("$Package_Path"));
-
- if ($receiptVers[0] == $localPkgVers[0]) {
- if ($receiptVers[1] > $localPkgVers[1]){
- $EXIT_VALUE = ((1 << 6));
- }
- } else {
- if ($receiptVers[0] > $localPkgVers[0]){
- $EXIT_VALUE = ((1 << 6));
- }
- }
- }
-
- #
- # Don't install if target system is less than 10.2.6
- #
- if(CheckVersion("$SYSTEM_VERS", "10.2.6", "ProductVersion", "<")) {
- $EXIT_VALUE = (1 << 6);
- }
-
- exit ($EXIT_VALUE);
-
- ###
-
- sub CheckVersion
- {
- my $path = $_[0];
- my $version = $_[1];
- my $keyName = $_[2];
- my $operator = $_[3];
-
- if (! -e $path) {
- return 0;
- }
-
- if (!$operator) {
- $operator = "==";
- }
-
- my $oldSeperator = $/;
- $/ = \0;
-
- open( PLIST, "$path") || do {
- return 0;
- };
-
- $plistData = <PLIST>;
- $plistData =~ /<dict>(.*?)<\/dict>/gis;
-
- @items = split(/<key>/, $plistData);
-
- shift @items;
- foreach $item (@items) {
- $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
- $versiondata{ $1 } = $2;
- }
-
- close(PLIST);
-
- $/ = $oldSeperator;
-
- @theVersionArray = split(/\./, $versiondata{$keyName});
- for ($i = 0; $i < 3; $i++) {
- if(!$theVersionArray[$i]) {
- $theVersionArray[$i] = '0';
- }
- }
-
- @versionArray = split(/\./, $version);
-
- my $actualVersion;
-
- for ($i = 0; $i < 3; $i++) {
- if (($theVersionArray[$i] != $versionArray[$i]) or ($i == 2)) {
-
- $actualVersion = $theVersionArray[$i];
- $version = $versionArray[$i];
-
- last;
- }
- }
-
- my $expression = '$actualVersion ' . $operator . ' $version';
- if( eval ($expression) )
- {
- return 1;
- }
- else
- {
- return 0;
- }
-
- }
-
- sub ExtractPkgVersion
- {
- my $path = $_[0];
-
- my $pkgMajor;
- my $pkgMinor;
-
- $pkgMajor = GetPlistVersion("$path/Contents/Info.plist", "IFMajorVersion");
- $pkgMinor = GetPlistVersion("$path/Contents/Info.plist", "IFMinorVersion");
-
- if (! $pkgMajor || ! $pkgMinor)
- {
- open (FILE, "$path/Contents/Resources/package_version");
- $line = <FILE>;
- chomp $line;
- $line =~ /Major:\s(.*)/;
- $pkgMajor = $1;
- $line = <FILE>;
- chomp $line;
- $line =~ /Minor:\s(.*)/;
- $pkgMinor = $1;
- close (FILE);
- }
-
- if (! $pkgMajor)
- {
- $pkgMajor = 0;
- }
- if (! $pkgMinor)
- {
- $pkgMinor = 0;
- }
- return ($pkgMajor, $pkgMinor);
- # return $pkgMajor . "." . $pkgMinor;
- }
-
- sub GetPlistVersion
- {
- my $path = $_[0];
- my $keyName = $_[1];
-
- my %versiondata;
-
- if (! -e $path) {
- return 0;
- }
-
- my $oldSeperator = $/;
- $/ = \0;
-
- open( PLIST, "$path") || do {
- return 0;
- };
-
- $plistData = <PLIST>;
- $plistData =~ /<dict>(.*?)<\/dict>/gis;
-
- @items = split(/<key>/, $plistData);
-
- shift @items;
- foreach $item (@items) {
- $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
- $versiondata{ $1 } = $2;
- }
-
- close(PLIST);
-
- $/ = $oldSeperator;
-
- return $versiondata{$keyName};
- }
-
- sub GetPackageName
- {
- my $pathToPackage = $_[0];
-
- my @pathItems = split (/\//,$pathToPackage);
-
- return $pathItems[-1];
- }
-